<?php

namespace pmvc\data;

use pmvc\data\DataSource;
use pmvc\util\ClassUtil;
use Exception;
use DateTime;

abstract class AbstractDataSource 
	implements DataSource {

	protected function buildQuery($sql, $args) {
	    for ($i=0; $i<count($args); $i++) {
	    	$arg = NULL;
	    	if (is_string($args[$i])) {
	    		$arg = "'".$this->escape($args[$i])."'";
	    	} else if (is_numeric($args[$i])) {
	    		$arg = $args[$i];
	    	} else if (is_bool($args[$i])) {
	    		$arg = $args[$i]===TRUE ? 1 : 0;
	    	} else if (is_null($args[$i]) || empty($args[$i])) {
	    		$arg = "NULL";
	    	} else if (is_object($args[$i]) && ClassUtil::isInstance($args[$i], 'DateTime')) {
	    		$arg = "'".$args[$i]->format("Y-m-d H:m:s")."'";
	    	} else if (is_array($args[$i])) {
	    		$sqlTmp = "";
	    		for ($j=0; $j<count($args[$i]); $j++) {
	    			$sqlTmp .= "{".$j."}";
	    			if ($j<(count($args[$i])-1)) {
	    				$sqlTmp .= ",";
	    			}
	    		}
	    		$arg = $this->buildQuery($sqlTmp, $args[$i]);
	    	} else {
	    		throw new Exception(
	    			"Unable to determine variable type for sql query");
	    	}
            $sql = str_replace("{".$i."}", $arg, $sql);
        }
        return $sql;
	}

}

?>